USE [QLLVANTAI]
GO

/****** Object:  StoredProcedure [dbo].[sp_DKLichlamviec]    Script Date: 09/30/2013 23:59:07 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO


CREATE proc [dbo].[sp_DKLichlamviec] 
		@mavanchuyen int, @maxe int , @manhanvien int, @vaitro int, @error nvarchar(100) out
as
begin tran

	set tran isolation level SERIALIZABLE
	
	
	-- kiem tra mavanchuyen
	declare @kt_mavc int
	
	set @kt_mavc = (select COUNT(*) from LichVanChuyen where Ma_VanChuyen = @mavanchuyen)
	if @kt_mavc = 0
	begin
		set @error = N'Lỗi: Mã vận chuyển không tồn tại'
		rollback
		print @error 
		return
	end	
	
	-- kiem tra maxe
	declare @kt_maxe int
	
	set @kt_maxe = (select COUNT(*) from ChiTietLich where Ma_VanChuyen = @mavanchuyen and Ma_Xe = @maxe ) 
	if @kt_maxe = 0
	begin
		set @error = N'Lỗi: Mã xe không tồn tại' 
		rollback
		print @error 
		return
	end	
	
	-- kiem tra nhan vien da dang ky chuyen di
	if exists(select * from DangKy where Ma_VanChuyen = @mavanchuyen  and Ma_NV = @manhanvien)
	begin
		set @error = N'Lỗi: bạn đã đăng ký vào chuyến đi này' 
		rollback
		print @error 
		return
	end 
	
	
	if @vaitro = 1  -- taixe
	begin
		
		
		declare @sl_taixetrong int
		set @sl_taixetrong =  (select So_TaiXeTrong  from ChiTietLich with (XLOCK) where Ma_VanChuyen = @mavanchuyen and Ma_Xe = @maxe)
		
		if @sl_taixetrong < 1
		begin
			set @error = N'Lỗi: đã đủ người đăng ký'
			rollback
			print @error 
		end
		
		
		else
		begin
			waitfor delay '00:00:05'
			
			set @sl_taixetrong = @sl_taixetrong - 1
			-- tien hanh dang ky cho nhan vien do
			insert into DangKy (Ma_VanChuyen, Ma_NV, VaiTro, Ma_Xe) values(@mavanchuyen, @manhanvien, @vaitro, @maxe)
			update ChiTietLich set So_TaiXeTrong = @sl_taixetrong where Ma_VanChuyen = @mavanchuyen and Ma_Xe = @maxe
			commit tran
		end
		
		
	end
	
	else   -- phu lai
	begin
		
		
		declare @sl_phulaitrong int
		set @sl_phulaitrong = (select So_PhuLaiTrong  from ChiTietLich with (XLOCK) where Ma_VanChuyen = @mavanchuyen and Ma_Xe = @maxe)
		
		if @sl_phulaitrong < 1
		begin
			set @error = N'Lỗi: đã đủ người đăng ký'
			rollback
			print @error 
		end
		
		else
		begin
			waitfor delay '00:00:05'
			set @sl_phulaitrong = @sl_phulaitrong - 1
			-- tien hanh dang ky cho nhan vien do
			insert into DangKy (Ma_VanChuyen, Ma_NV, VaiTro, Ma_Xe) values(@mavanchuyen, @manhanvien, @vaitro, @maxe)
			update ChiTietLich set So_PhuLaiTrong = @sl_phulaitrong where Ma_VanChuyen = @mavanchuyen and Ma_Xe = @maxe
			commit tran
		end
		
	end
	



GO

